package com.explorati.design_pattern.hybrid.observermediator;

import java.util.Observable;

/**
 * 提供两个构造函数：第一个带一个参数，该参数是产品对象，其默认事件类型是新建(NEW_PRODUCT)类型
 * 第二个构造函数带两个参数，其中第二个参数用于指定产品对象的事件类型
 * 另外,nofityEventDispatch()方法是私有的，其作用是明确事件的观察者，并在初始化时通知观察者，该方法是在
 * 构造函数中被调用
 * 
 * @author explorati
 *
 */
// 产品事件
public class ProductEvent extends Observable {

	// 事件源
	private Product source;
	// 事件类型
	private ProductEventType type;

	public ProductEvent(Product p) {
		this(p, ProductEventType.NEW_PRODUCT);
	}

	public ProductEvent(Product p, ProductEventType type) {
		this.source = p;
		this.type = type;
		// 事件触发
		notifyEventDispatch();
	}

	// 获得事件源
	public Product getSource() {
		return source;
	}

	// 获得事件的类型
	public ProductEventType getType() {
		return type;
	}

	// 触发事件处理
	private void notifyEventDispatch() {
		super.addObserver(EventDispatch.getEventDispatch());
		super.setChanged();
		super.notifyObservers(source);
	}

}
